﻿//using System;
//using System.Collections.Concurrent;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//using Utility;
//using System.Configuration;
//using WPay.Infrastructure.Unity;

//namespace WPay.Infrastructure.Unity
//{
//    /// <summary>
//    /// ConnectionMultiplexer对象管理帮助类
//    /// </summary>
//    public static class RedisConnectionHelp
//    {
//        //系统自定义Key前缀
//        public static readonly string SysCustomKey = "";

//        //"127.0.0.1:6379,allowadmin=true
//        private static readonly string RedisConnectionString = ConfigManage.GetConfigByKey("RedisConn");

//        private static readonly object Locker = new object();
//        private static ConnectionMultiplexer _instance;
//        private static readonly ConcurrentDictionary<string, ConnectionMultiplexer> ConnectionCache = new ConcurrentDictionary<string, ConnectionMultiplexer>();

      
//        /// <summary>
//        /// 单例获取
//        /// </summary>
//        public static ConnectionMultiplexer Instance
//        {
//            get
//            {
//                if (_instance == null)
//                {
//                    lock (Locker)
//                    {
//                        if (_instance == null || !_instance.IsConnected)
//                        {
//                            _instance = GetManager();
//                        }
//                    }
//                }
//                return _instance;
//            }
//        }

//        /// <summary>
//        /// 缓存获取
//        /// </summary>
//        /// <param name="connectionString"></param>
//        /// <returns></returns>
//        public static ConnectionMultiplexer GetConnectionMultiplexer(string connectionString)
//        {
//            if (!ConnectionCache.ContainsKey(connectionString))
//            {
//                ConnectionCache[connectionString] = GetManager(connectionString);
//            }
//            return ConnectionCache[connectionString];
//        }

//        private static ConnectionMultiplexer GetManager(string connectionString = null)
//        {
//            try
//            {
//                connectionString = connectionString ?? RedisConnectionString;
//                var connect = ConnectionMultiplexer.Connect(connectionString);

//                //注册如下事件
//                connect.ConnectionFailed += MuxerConnectionFailed;
//                connect.ConnectionRestored += MuxerConnectionRestored;
//                connect.ErrorMessage += MuxerErrorMessage;
//                connect.ConfigurationChanged += MuxerConfigurationChanged;
//                connect.HashSlotMoved += MuxerHashSlotMoved;
//                connect.InternalError += MuxerInternalError;

//                return connect;
//            }
//            catch (Exception)
//            {

//                return null;
//            }
//        }

//        #region 事件

//        /// <summary>
//        /// 配置更改时
//        /// </summary>
//        /// <param name="sender"></param>
//        /// <param name="e"></param>
//        private static void MuxerConfigurationChanged(object sender, EndPointEventArgs e)
//        {
//            Console.WriteLine("Configuration changed: " + e.EndPoint);
//        }

//        /// <summary>
//        /// 发生错误时
//        /// </summary>
//        /// <param name="sender"></param>
//        /// <param name="e"></param>
//        private static void MuxerErrorMessage(object sender, RedisErrorEventArgs e)
//        {
//            Console.WriteLine("ErrorMessage: " + e.Message);
//        }

//        /// <summary>
//        /// 重新建立连接之前的错误
//        /// </summary>
//        /// <param name="sender"></param>
//        /// <param name="e"></param>
//        private static void MuxerConnectionRestored(object sender, ConnectionFailedEventArgs e)
//        {
//            Console.WriteLine("ConnectionRestored: " + e.EndPoint);
//        }

//        /// <summary>
//        /// 连接失败 ， 如果重新连接成功你将不会收到这个通知
//        /// </summary>
//        /// <param name="sender"></param>
//        /// <param name="e"></param>
//        private static void MuxerConnectionFailed(object sender, ConnectionFailedEventArgs e)
//        {
//            Console.WriteLine("重新连接：Endpoint failed: " + e.EndPoint + ", " + e.FailureType + (e.Exception == null ? "" : (", " + e.Exception.Message)));
//        }

//        /// <summary>
//        /// 更改集群
//        /// </summary>
//        /// <param name="sender"></param>
//        /// <param name="e"></param>
//        private static void MuxerHashSlotMoved(object sender, HashSlotMovedEventArgs e)
//        {
//            Console.WriteLine("HashSlotMoved:NewEndPoint" + e.NewEndPoint + ", OldEndPoint" + e.OldEndPoint);
//        }

//        /// <summary>
//        /// redis类库错误
//        /// </summary>
//        /// <param name="sender"></param>
//        /// <param name="e"></param>
//        private static void MuxerInternalError(object sender, InternalErrorEventArgs e)
//        {
//            Console.WriteLine("InternalError:Message" + e.Exception.Message);
//        }

//        #endregion 事件
//    }
//}
